package srv;

import java.util.ArrayList;
import java.util.List;

import beans.ClienteBean;
import beans.FacturaBean;
import beans.ItemFacturaBean;
import dao.HibernateFacturaBeanDAO;
import entities.ClienteEntity;
import entities.FacturaEntity;
import entities.ItemFacturaEntity;
import entities.ListaPreciosEntity;
import entities.RodamientoEntity;

public class FacturaSRV 
{
	private static HibernateFacturaBeanDAO dao;
	private static FacturaSRV instancia;
	
	static 
	{
		dao = HibernateFacturaBeanDAO.getInstancia();
	}
	
	public static FacturaSRV getInstancia()
	{
		if (instancia == null)
		{
			instancia = new FacturaSRV();
		}
		return instancia;
	}
	
	public FacturaEntity pasadoDesdeBean( FacturaBean facturaBean )
	{
		FacturaEntity factura = new FacturaEntity();
		
		ClienteEntity cliente = ClienteSRV.getInstancia().pasadoDesdeBean( facturaBean.getCliente());
		factura.setCliente(cliente);
		
		factura.setTipoFactura( facturaBean.getTipoFactura());
		factura.setFecha( facturaBean.getFecha() );
		
		List<ItemFacturaEntity> itemsEntity = new ArrayList<ItemFacturaEntity>();
		List<ItemFacturaBean> itemsBean = facturaBean.getItems();
		
		for( ItemFacturaBean it : itemsBean )
		{
			ItemFacturaEntity ife = new ItemFacturaEntity();
			ife.setCantidad(it.getCantidad());
			ife.setPrecio(it.getPrecio());
			ife.setRodamiento(RodamientoSRV.getInstancia().pasadoDesdeBean(it.getRodamiento()));
			
			itemsEntity.add(ife);
		}
		factura.setItems(itemsEntity);
		
		return factura;
	}
	
	public FacturaBean pasadoDesdeEntity( FacturaEntity facturaEntity )
	{
		FacturaBean factura = new FacturaBean();
		
		ClienteBean cliente = ClienteSRV.getInstancia().pasadoDesdeEntity( facturaEntity.getCliente());
		factura.setCliente(cliente);
		
		factura.setTipoFactura( facturaEntity.getTipoFactura());
		factura.setFecha( facturaEntity.getFecha() );
		
		List<ItemFacturaBean> itemsBean = new ArrayList<ItemFacturaBean>();
		List<ItemFacturaEntity> itemsEntity = facturaEntity.getItems();
		
		for( ItemFacturaEntity it : itemsEntity )
		{
			ItemFacturaBean ifb = new ItemFacturaBean();
			ifb.setCantidad(it.getCantidad());
			ifb.setPrecio(it.getPrecio());
			ifb.setRodamiento(RodamientoSRV.getInstancia().pasadoDesdeEntity(it.getRodamiento()));
			
			itemsBean.add(ifb);
		}
		factura.setItems(itemsBean);
		
		return factura;
	}
	
	public void registrarFactura( FacturaBean nuevaFactura )
	{
		FacturaEntity factura = this.getInstancia().pasadoDesdeBean( nuevaFactura );
		dao.registrarFactura( factura );
	}
}
